//package com.glsc.ngateway.common.base.utils.redis;
//
//
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.support.TransactionSynchronizationAdapter;
//import org.springframework.transaction.support.TransactionSynchronizationManager;
//
//import java.util.concurrent.TimeUnit;
//
///**
// * redisson 分布式工具类
// * @author xuchang
// */
//@Component
//public class RedisUtils {
//
//    private static final Logger logger = LoggerFactory.getLogger(RedisUtils.class);
//
//    /**
//     * 等待锁时间
//     */
//    private static final long DEFAULT_WAIT_TIME = 0;
//    /**
//     * 持有锁时间
//     */
//    private static final long DEFAULT_TIMEOUT = 30;
//    private static final TimeUnit DEFAULT_TIME_UNIT = TimeUnit.SECONDS;
//
//    private static RedissonClient redissonClient;
//
//    @Autowired
//    public void setRedissonClient(RedissonClient redissonClient){
//        RedisUtils.redissonClient = redissonClient;
//    }
//    /**
//     * 加锁
//     *
//     * @param lockKey
//     */
//    public static void lock(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock(DEFAULT_TIMEOUT, DEFAULT_TIME_UNIT);
//    }
//
//    /**
//     * 带过期时间的锁
//     *
//     * @param lockKey   key
//     * @param leaseTime 上锁后自动释放锁时间
//     */
//    public static void lock(String lockKey, long leaseTime) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock(leaseTime, DEFAULT_TIME_UNIT);
//    }
//
//    /**
//     * 带超时时间的锁
//     *
//     * @param lockKey   key
//     * @param leaseTime 上锁后自动释放锁时间
//     * @param unit      时间单位
//     */
//    public static void lock(String lockKey, long leaseTime, TimeUnit unit) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.lock(leaseTime, unit);
//    }
//
//    /**
//     * 尝试获取锁
//     *
//     * @param lockKey key
//     * @return
//     */
//    public static boolean tryLock(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        try {
//            return lock.tryLock(DEFAULT_WAIT_TIME, DEFAULT_TIMEOUT, DEFAULT_TIME_UNIT);
//        } catch (InterruptedException e) {
//            logger.error("RedissonUtils - tryLock异常", e);
//        }
//        return false;
//    }
//
//    /**
//     * 尝试获取锁
//     *
//     * @param lockKey   key
//     * @param waitTime  最多等待时间
//     * @param leaseTime 上锁后自动释放锁时间
//     * @return boolean
//     */
//    public static boolean tryLock(String lockKey, long waitTime, long leaseTime) {
//        RLock lock = redissonClient.getLock(lockKey);
//        try {
//            return lock.tryLock(waitTime, leaseTime, DEFAULT_TIME_UNIT);
//        } catch (InterruptedException e) {
//            logger.error("RedissonUtils - tryLock异常", e);
//        }
//
//        return false;
//    }
//
//    /**
//     * 尝试获取锁
//     *
//     * @param lockKey   key
//     * @param waitTime  最多等待时间
//     * @param leaseTime 上锁后自动释放锁时间
//     * @param unit      时间单位
//     * @return boolean
//     */
//    public static boolean tryLock(String lockKey, long waitTime, long leaseTime, TimeUnit unit) {
//        RLock lock = redissonClient.getLock(lockKey);
//        try {
//            return lock.tryLock(waitTime, leaseTime, unit);
//        } catch (InterruptedException e) {
//            logger.error("RedissonUtils - tryLock异常", e);
//        }
//
//        return false;
//    }
//
//    /**
//     * 释放锁
//     *
//     * @param lockKey key
//     */
//    public static void unlockAfterCommit(String lockKey) {
//        // 是否开启事务判断
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
//                @Override
//                public void afterCommit() {
//                    logger.info("事务提交成功后释放锁:lockKey:{}", lockKey);
//                    unlock(lockKey);
//                }
//            });
//        } else {
//            logger.info("没有开启事务直接释放锁:lockKey:{}", lockKey);
//            unlock(lockKey);
//        }
//
//
//    }
//
//
//    /**
//     * 释放锁
//     *
//     * @param lockKey key
//     */
//    public static void unlock(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        lock.unlock();
//    }
//
//
//
//    /**
//     * 是否存在锁
//     *
//     * @param lockKey key
//     * @return
//     */
//    public static boolean isLocked(String lockKey) {
//        RLock lock = redissonClient.getLock(lockKey);
//        return lock.isLocked();
//    }
//}
